package com.changjiang.luban.service.sys;


import com.changjiang.luban.dao.domain.sys.SysPermission;
import com.changjiang.luban.dao.domain.sys.SysUser;
import com.changjiang.luban.utils.data.Page;
import com.changjiang.luban.utils.data.Tree;

import java.util.List;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 *
 * @author changjiang
 * Date: 2018-03-29
 * Time: 11:17
 */
public interface SysUserServiceI {

    /**
     * 查询用户的权限菜单
     * @param userId 用户编号
     * @return 权限菜单集合
     */
    List<Tree> tree(Long userId);

    /**
     * 查询角色的权限菜单
     * @param roleId 角色编号
     * @return 权限菜单集合
     */
    List<Tree> treeRole(Long roleId);

    /**
     * 查询系统中的所有权限
     * @return 权限菜单集合
     */
    List<Tree> tree();

    /**
     * 查询用户信息
     * @param userName 登录名
     * @return Null 用户信息不存在
     */
    SysUser findByLoginName(String userName);

    /**
     * 查询用户信息
     * @param id 用户编号
     * @return 用户集合信息
     */
    List<SysUser> findAll (Long id);

    /**
     * 查询用户信息
     * @param id 用户编号
     * @return 系统优化对象实体
     */
    SysUser findById (Long id);
    /**
     * 系统用户登录
     * @param userName 登录名
     * @param passWord 登录密码(明文密码，加密在方法中有相应的加密方法)
     * @return Null 登录失败 SysUser 登录成功
     */
    SysUser login(String userName, String passWord);

    /**
     * 分页查询用户信息
     * @param name 用户名称
     * @param page 分页对象
     * @return page
     */
    Page<SysUser> pageByName(String name, Page page);

    /**
     * 保存用户信息
     * @param sysUser 用户实体
     * @param roleId  角色编号
     * @return true 保存成功 false 保存失败
     */
    boolean saveSysUser(SysUser sysUser,Long roleId);

    /**
     * 删除用户信息
     * @param id  用户编号
     * @return  true 保存成功 false 保存失败
     */
    boolean delete(Long id);

    /**
     * 分页查询权限菜单信息
     * @param page 分页对象
     * @return 分页结果
     */
    Page<SysPermission> page(Page page);

    /**
     * 查询权限菜单集合
     * @param tree 菜单编号集合信息
     * @return 权限菜单集合信息
     */
    Set<SysPermission> findAll(List<String> tree);

    /**
     * 修改用户信息
     * @param sysUser 用户实体
     * @return true 保存成功 false 保存失败
     */
    boolean updateSysUser(SysUser sysUser);
}
